


local ssrmaindata = {}

-- NPC IDX 天书宝卷
local IDX_TOME = 8
local IDX_PR = 15
local npc_view_path = {
    [1] = "",
    -- [IDX_TOME] = "main/view_celestial_tome.lua",
    [IDX_TOME] = "GUILayout/npc/npc_celestial_tome.lua",
    [IDX_PR] = "GUILayout/npc/npc_Premium_Refine.lua",
}
local npc_view_win = {}
local npc_uis = {}

local function clow_npc_win(npc_idx)
    if not npc_idx or not npc_view_win[npc_idx] or GUI:Win_IsNull(npc_view_win[npc_idx]) then
        return
    end
    GUI:Win_Close(npc_view_win[npc_idx])
end

local function clow_all_npc_win()
    for npc_idx, npc_win in pairs(npc_view_win) do
        clow_npc_win(npc_idx)
    end
end

local function get_npc_win(npc_idx)
    local npc_parent = GUI:GetWindow(nil, "npc_"..npc_idx)
    if npc_parent then
        GUI:removeAllChildren(npc_parent)
        GUI:setPosition(npc_parent, ssrmaindata.center_x, ssrmaindata.center_y)
    else
        npc_parent = GUI:Win_Create("npc_"..npc_idx, ssrmaindata.center_x, ssrmaindata.center_y,
            ssrmaindata.screen_width, ssrmaindata.screen_height, false, false, flase, true, true, npcid, 1)
    end
    npc_view_win[npc_idx] = npc_parent
    return npc_parent
end

local function open_clent_npc_view(npc_idx)
    local view_path = npc_view_path[npc_idx]
    if not view_path or "" == view_path then
        SL:Print("ssrmain open_clent_npc_view view_path error! npc_idx:", npc_idx)
        return
    end
    local npc_win = get_npc_win(npc_idx)
    -- SL:Print("open_clent_npc_view test npc_idx:" .. npc_idx)
    -- SL:Print("open_clent_npc_view test view_path:" .. view_path)
    -- SL:Print("open_clent_npc_view test npc_win:", npc_win)
    local ui = SL:Require(view_path, true)
    ui.init(npc_win)
    npc_uis[npc_idx] = ui
    -- SL:Print("open_clent_npc_view view_path. ui:", npc_uis[npc_idx])
end


--===========================================================================
--===========================================================================
--===========================================================================
 -- 客户端注册 接收消息
 local function msg_callback_200(msg_id, p1, p2, p3, msg_data)
    SL:Print("ssrmain msg_callback_200:", msg_id, p1, p2, p3, msg_data)
end
local function msg_callback_1000(msg_id, p1, p2, p3, msg_data)
    SL:Print("ssrmain msg_callback_1000:", msg_id, p1, p2, p3, msg_data)
end
local function msg_callback_2110(msg_id, p1, p2, p3, msg_data)
    SL:Print("ssrmain msg_callback_2111:", msg_id, p1, p2, p3, msg_data)
    local npc_ui = npc_uis[IDX_TOME]
    if npc_ui and 'function' == type(npc_ui.on_msg_handler) then
        npc_ui.on_msg_handler(msg_id, p1, p2, p3, msg_data)
    end
end
local function msg_callback_2115(msg_id, p1, p2, p3, msg_data)
    SL:Print("ssrmain msg_callback_2115:", msg_id, p1, p2, p3, msg_data)
    local npc_ui = npc_uis[IDX_PR]
    if npc_ui and 'function' == type(npc_ui.on_msg_handler) then
        npc_ui.on_msg_handler(msg_id, p1, p2, p3, msg_data)
    end
end


local function RegisterSsrMainUdtMsg()
    SL:RegisterLuaNetMsg(200, msg_callback_200)
    SL:RegisterLuaNetMsg(1000, msg_callback_1000)
    SL:RegisterLuaNetMsg(2110, msg_callback_2110)
    SL:RegisterLuaNetMsg(2115, msg_callback_2115)
end

local function UnRegisterSsrMainUdtMsg()
    SL:UnRegisterLuaNetMsg(200)
    SL:UnRegisterLuaNetMsg(1000)
    SL:UnRegisterLuaNetMsg(2110)
    SL:UnRegisterLuaNetMsg(2115)
end
--===========================================================================
--===========================================================================
--===========================================================================









--===========================================================================
--===========================================================================
--===========================================================================
-- 与NPC对话
local function event_callback_talktonpc(data)
    SL:Print("ssrmain event_callback_talktonpc  data:", SL:JsonEncode(data, false))
    -- {"UserID":"24398","index":8,"name":"天书宝卷"}
    clow_all_npc_win()
    open_clent_npc_view(data.index)
end
-- LUA_EVENT_NPCLAYER_OPENSTATUS
local function event_callback_npclayer_openstatus(data)
    SL:Print("ssrmain event_callback_npclayer_openstatus  data:", SL:JsonEncode(data, false))
end
-- 玩家/怪物/NPC进视野
local function event_callback_actor_in_view(data)
    SL:Print("ssrmain event_callback_actor_in_view  data:", SL:JsonEncode(data, false))
end
-- 玩家/怪物/NPC出视野
local function event_callback_actor_out_view(data)
    SL:Print("ssrmain event_callback_actor_out_view  data:", SL:JsonEncode(data, false))
    clow_npc_win(SL:GetMetaValue("ACTOR_TYPE_INDEX", data.id))
end

-- 离开游戏世界 小退触发
local function event_callback_leave_world(data)
    SL:Print("ssrmain event_callback_leave_world  data:", SL:JsonEncode(data, false))
    DestorySsrMain()
end

local function RegisterSsrMainLuaEvent()
    SL:RegisterLUAEvent(LUA_EVENT_TALKTONPC, "LUA_EVENT_TALKTONPC", event_callback_talktonpc)
    SL:RegisterLUAEvent(LUA_EVENT_LEAVE_WORLD, "LUA_EVENT_LEAVE_WORLD", event_callback_leave_world)
    SL:RegisterLUAEvent(LUA_EVENT_NPCLAYER_OPENSTATUS, "LUA_EVENT_NPCLAYER_OPENSTATUS", event_callback_npclayer_openstatus)
    SL:RegisterLUAEvent(LUA_EVENT_ACTOR_IN_OF_VIEW, "LUA_EVENT_ACTOR_IN_OF_VIEW", event_callback_actor_in_view)
    SL:RegisterLUAEvent(LUA_EVENT_ACTOR_OUT_OF_VIEW, "LUA_EVENT_ACTOR_OUT_OF_VIEW", event_callback_actor_out_view)
end

local function UnRegisterSsrMainLuaEvent()
    SL:UnRegisterLUAEvent(LUA_EVENT_TALKTONPC, "LUA_EVENT_TALKTONPC")
    SL:UnRegisterLUAEvent(LUA_EVENT_LEAVE_WORLD, "LUA_EVENT_LEAVE_WORLD")
    SL:UnRegisterLUAEvent(LUA_EVENT_NPCLAYER_OPENSTATUS, "LUA_EVENT_NPCLAYER_OPENSTATUS")
    SL:UnRegisterLUAEvent(LUA_EVENT_ACTOR_IN_OF_VIEW, "LUA_EVENT_ACTOR_IN_OF_VIEW")
    SL:UnRegisterLUAEvent(LUA_EVENT_ACTOR_OUT_OF_VIEW, "LUA_EVENT_ACTOR_OUT_OF_VIEW")
end
--===========================================================================
--===========================================================================
--===========================================================================











--===========================================================================
--===========================================================================
--===========================================================================
function InitSsrMain()
    if ssrmaindata.is_init then
        return
    end
    ssrmaindata.is_init = true
    ssrmaindata.is_pc = SL:GetMetaValue("WINPLAYMODE")
    ssrmaindata.screen_width = SL:GetMetaValue("SCREEN_WIDTH")
    ssrmaindata.screen_height = SL:GetMetaValue("SCREEN_HEIGHT")
    ssrmaindata.center_x = ssrmaindata.screen_width / 2
    ssrmaindata.center_y = ssrmaindata.screen_height / 2
	SL:Print("LNTest.SsrMain.InitSsrMain is_pc:", ssrmaindata.is_pc)
	SL:Print("LNTest.SsrMain.InitSsrMain screen_width:", ssrmaindata.screen_width)
	SL:Print("LNTest.SsrMain.InitSsrMain screen_height:", ssrmaindata.screen_height)
    RegisterSsrMainUdtMsg()
    RegisterSsrMainLuaEvent()
end

function DestorySsrMain()
    if not ssrmaindata.is_init then
        return
    end
    ssrmaindata.is_init = false
    UnRegisterSsrMainUdtMsg()
    UnRegisterSsrMainLuaEvent()
end


function GetSsrMain()
    if not ssrmaindata.is_init then
        InitSsrMain()
    end
    return ssrmaindata
end
--===========================================================================
--===========================================================================
--===========================================================================



local function ssrmain()
    SL:Print("Hello World, This is ssrmain!")
	InitSsrMain()
end

ssrmain()











--===========================================================================
--===========================================================================
--===========================================================================